Techniques for transmitting failure detection protocol packets

ABSTRACT

Techniques are provided for processing of failure detection protocol (FDP) packets. Techniques are provided that assist a CPU of a network device in processing incoming FDP packets. The task of transmitting FDP packets from a network device is offloaded from the CPU of the network device and instead handled by another module of the network device. In this manner, the processing that the CPU of the network device has to perform for transmitting FDP packets for the various FDP sessions of the network device is reduced. This enables the network device to support newer FDPs with shorter periodic interval requirements.

CROSS-REFERENCES TO RELATED APPLICATIONS

The present application claims the benefit and priority under 35 U.S.C.119(e) from U.S. Provisional Application No. 60/880,074 filed Jan. 11,2007 entitled TIMING SENSITIVE PROTOCOL PACKET HARDWARE ASSIST, theentire contents of which are herein incorporated by reference for allpurposes.

The present application also incorporates by reference for all purposesthe entire contents of the following applications filed concurrentlywith the present application:

(1) U.S. Non-Provisional Application No. ______ (Atty. Docket No.019959-003910US) titled TECHNIQUES FOR PROCESSING INCOMING FAILUREDETECTION PROTOCOL PACKETS;

(2) U.S. Non-Provisional Application No. ______ (Atty. Docket No.019959-003920US) titled TECHNIQUES FOR DETECTING NON-RECEIPT OF FAULTDETECTION PROTOCOL PACKETS; and

(3) U.S. Non-Provisional Application No. _______(Atty. Docket No.019959-003940US) titled TECHNIQUES FOR USING DUAL MEMORY STRUCTURES FORPROCESSING FAILURE DETECTION PROTOCOL PACKETS.

BACKGROUND OF THE INVENTION

The present application relates to networking technologies and moreparticularly to techniques for transmitting failure detection protocolpackets from a network device.

The ability to detect communication failures is an important aspect ofany networking environment. Networks use several different mechanisms todetect failures. For example, several different failure detectionprotocols (FDP) are used that enable detection of failures in anetworking environment. Examples of FDPs include “hello” protocols,“keep alive” protocols, various Organization Administration andMaintenance (OAM) protocols, and others.

Network devices (e.g., routers, switches) in a network using a failuredetection protocol are generally configured to continuously transmit FDPpackets at regular intervals. A network device in the network receivesFDP packets transmitted by other network devices in the network and usesthe periodically received packets to ascertain the health of the otherdevices and the network connections. For example, if a network devicedoes not receive an FDP packet within a period of time associated withthe FDP packet, then the network device may assume that there is anetwork failure somewhere in the network that prevented the expected FDPpacket from reaching the network device. The network device itself alsotransmits FDP packets on a periodic basis.

A network device may receive and transmit different types of FDP packetsand may be involved in one or more FDP sessions at a time. Eachtransmitted FDP packet comprises an identifier identifying a unique FDPsession for which the packet has been transmitted.

Traditionally, FDP-related processing in a network device is performedby software executed by a CPU or processor of the network device. Forexample, a processor of a network device executing software configuredfor FDP packets processing is configured to process FDP packets receivedby the network device from other network devices and handle transmissionof FDP at regular intervals from the network device. In older failuredetection protocols, the periodic time intervals associated with FDPprotocols were generally in the range of seconds such as 1 second, 5seconds, 10 seconds, 20 seconds, and the like. Such a time intervalallowed sufficient time for the software running on the CPU to handleprocessing of the incoming FDP packets and also to process transmissionof the FDP packets within the periodic time interval withoutdetrimentally affecting the performance of the CPU or overwhelming theCPU. However, due to the large periodic interval time values, the timerequired to detect network failures is also quite large (usually severalseconds). While this was acceptable in the past, it is no longeracceptable in today's larger and faster networks wherein a long failuredetection time translates to large amounts of data being lost at today'sfast networking speeds (e.g., at gigabit speeds).

In order to reduce failure detection times, today's networks typicallyuse newer fault detection protocols with significantly shorter periodictime intervals that dramatically reduce the failure detection times.Examples of such newer FDPs include OAM protocols such as BidirectionalForwarding (BFD) protocol which is used to detect router link failuresand the 802.1ag standard that specifies protocols, procedures, andmanaged objects to support transport fault management. The periodic timeintervals associated with these new FDPs is usually in the order ofmilliseconds (msecs) or even faster.

While these new protocols reduce failure detection times, they create anundue burden on a network device that is configured to handle processingof the FDP packets. As a result of the dramatically shorter periodictime intervals, a network device has to periodically transmit FDPpackets in the order of milliseconds (msecs) or even faster, which ismuch faster than transmission processing done previously by networkdevice for older FDPs. Due to the faster transmission rates, the numberand rate at which FDP packets are received by a network device is alsomuch faster than in the past. As a result, more CPU cycles per unit timeare needed on the network device to perform FDP packets processing,including transmission of FDP packets and processing of incoming FDPpackets. However, processors in conventional network devices executingsoftware for processing the FDP packets are unable to cope up with theprocessing of newer FDP packets. As a result, conventional networkdevices are unable to handle and support the newer failure detectionprotocols.

BRIEF SUMMARY OF THE INVENTION

Embodiments of the present invention provide techniques that assist inprocessing of failure detection protocol (FDP) packets. Techniques areprovided that assist a CPU of a network device in processing incomingFDP packets. The task of transmitting FDP packets from a network deviceis offloaded from the CPU of the network device and instead handled byanother module of the network device. In this manner, the processingthat the CPU of the network device has to perform for transmitting FDPpackets for the various FDP sessions of the network device is reduced.This enables the network device to support newer FDPs with shorterperiodic interval requirements.

According to an embodiment of the present invention, techniques areprovided for transmitting packets according to an FDP from a networkdevice. The network device stores timer information specifying aperiodic time interval for transmitting an FDP packet for an FDP. FDPpackets for the FDP are transmitted periodically at times determinedbased upon the periodic time interval stored for the FDP. Thetransmitting is performed by a module of the network device other than aprocessor configured to execute software for processing FDP packets. Themodule may be a field-programmable logic device in one embodiment.

In one embodiment, the transmitting comprises determining a time fortransmitting an FDP packet for the FDP based upon the periodic timeinterval stored for the FDP, and transmitting an FDP packet at thedetermined time.

In one embodiment, the timer information for an FDP may comprise a firsttimer specifying the periodic time interval for the FDP and a secondtimer identifying when an FDP packet was last transmitted by the networkdevice for the FDP. An FDP packet may be transmitted when the secondtimer equals the first timer. The first timer may be set by the softwareexecuted by the processor of the network device and the second timer isupdated by the module.

In one embodiment, FDP packets for an FDP may comprise a field that isupdated with every successive FDP packet transmission. In this scenario,transmitting an FDP packet may comprise transmitting a first FDP packetbased upon the periodic time interval stored for the FDP, wherein thefield of the first failure is set to a first value, and transmitting,after transmitting the first FDP packet, a second FDP packet based uponthe periodic time interval stored for the FDP, wherein the field of thesecond FDP packet is set to a second value that is different from thefirst value. In one embodiment this may done by storing a parameter forthe FDP. Prior to transmitting the first FDP packet, the field of thefirst FDP packet may be set to the first value based upon the value ofthe parameter. The value of the parameter may be updated upontransmission of the first FDP packet. Prior to transmitting the secondFDP packet, the field of the second FDP packet may be set to the secondvalue based upon the updated value of the parameter.

Examples of FDPs include 802.1ag, Bidirectional Forwarding (BFD)protocol, and others. The periodic time intervals associated with theprotocols may even be less than one second.

The foregoing, together with other features, embodiments, and advantagesof the present invention, will become more apparent when referring tothe following specification, claims, and accompanying drawings.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a simplified diagram of a portion of a network that mayincorporate an embodiment of the present invention;

FIG. 2 depicts a simplified block diagram of a network deviceincorporating an embodiment of the present invention;

FIG. 3 depicts a simplified flowchart showing a method performed by anFDP Packet Handler (FPH) module for processing a CPU-bound packet in thereceive (Rx) path according to an embodiment of the present invention;

FIG. 4 depicts a simplified flowchart showing a method performed by anFPH module for detecting non-receipt of FDP packets for a sessionaccording to an embodiment of the present invention;

FIG. 5 depicts a simplified flowchart showing a method performed by anFPH module for transmitting FDP packets for an FDP session from anetwork device according to an embodiment of the present invention;

FIG. 6 depicts an example of a linked list priority queue that may beused by an FPH module to facilitate transmission of FDP packetsaccording to an embodiment of the present invention;

FIG. 7 depicts a two ring structure that may be used by an FPH module tofacilitate processing of FDP packets in the receive (Rx) path accordingto an embodiment of the present invention;

FIG. 8 is simplified block diagram of an FPH module according to anembodiment of the present invention;

FIG. 9 depicts a format for a BFD packet;

FIG. 10 depicts the format for a BFD header field;

FIG. 11 depicts a memory structure storing BFD reference information formultiple BFD sessions according to an embodiment of the presentinvention;

FIG. 12 depicts contents of counter information for a BFD session entryaccording to an embodiment of the present invention;

FIGS. 13A and 13B depict formats for two types of 802.1ag packets thatmay be processed by an embodiment of the present invention;

FIG. 14 depicts contents of an 802.1ag packet data section;

FIG. 15 depicts an 802.1ag packet reference table according to anembodiment of the present invention;

FIG. 16 depicts contents of a hash table and sessions table storingreference information according to an embodiment of the presentinvention;

FIG. 17 depicts a format of a Session Status FIFO according to anembodiment of the present invention;

FIG. 18 depicts a linked list that may be used by an FPH module tofacilitate transmission of 802.1ag packets according to an embodiment ofthe present invention; and

FIG. 19 depicts a simplified flowchart showing a method performed by anFPH module for transmitting 802.1ag packets according to an embodimentof the present invention.

DETAILED DESCRIPTION OF THE INVENTION

In the following description, for the purposes of explanation, specificdetails are set forth in order to provide a thorough understanding ofthe invention. However, it will be apparent that the invention may bepracticed without these specific details.

Embodiments of the present invention provide techniques that assist inprocessing of failure detection protocol (FDP) packets. Techniques areprovided that assist a CPU of a network device in processing incomingFDP packets. A failure detection protocol (or FDP) is intended toinclude any protocol, standard, procedure, or method in which packetsare transmitted at periodic intervals for purposes of monitoring,detecting, or identifying a failure in a network. A packet transmittedaccording to an FDP is referred to as an FDP packet. Examples of FDPsthat may be supported by embodiments of the present invention includeOAM protocols such as Bidirectional Forwarding (BFD) protocol which isused to detect router link failures and the 802.1ag standard thatspecifies protocols, procedures, and managed objects to supporttransport fault management.

FIG. 1 is a simplified diagram of a portion of a network 100 that mayincorporate an embodiment of the present invention. The portion ofnetwork 100 depicted in FIG. 1 comprises a number of network devices102, 104, 106, 108, 110, and 112 coupled to one another viacommunication links. A network device may be any device capable ofreceiving and/or transmitting data in a network. The communication linksmay be wired links or wireless links. Different protocols may be used tocommunicate data between the various network devices.

The network devices depicted in FIG. 1 may use one or more types offailure detection protocols (FDPs) to facilitate detection of failuresin network 100. The FDPs used may include OAM protocols such as BFD and802.1ag, and others. A network device may be involved in one or more FDPsessions. For each FDP session, the network device may be configured tocontinuously transmit FDP packets at a periodic time interval associatedwith that FDP session. A network device may also receive FDP packetstransmitted by other devices in the network. The periodic time intervalsat which FDP packets are received or transmitted may vary from one FDPsession to another depending on the type of FDP session. The periodictime intervals may be in the order of one or more milliseconds (msecs),one or more seconds, or other faster or slower time intervals.

In accordance with an embodiment of the present invention, a networkdevice 102 may be configured to receive FDP packets for one or more FDPsessions from other network devices. Network device 102 may alsotransmit FDP packets at periodic intervals for one or more FDP sessionsto other devices in the network. The time intervals at which the packetsare received and transmitted may vary from session to session and may bein the order of one or more milliseconds (as required by the newer FDPs)to seconds, or even faster or slower intervals. Network device 102 maybe configured to ascertain the health of the other devices and thenetwork connections based upon the FDP packets received by networkdevice 102. For example, if network device 102 does not receive an FDPpacket for an FDP session within a preconfigured time interval for thatsession, then network device 102 may assume that there is a networkfailure somewhere in the network that prevented the expected FDP packetsfrom reaching network device 102 for the session. Network device itselfmay transmit FDP packets at periodic intervals for one or more FDPsessions.

As depicted in FIG. 1, network device 102 comprises a processor or CPU114 and an FDP Packet Handler (FPH) module 116. CPU 114 is configured toexecute software for performing various tasks performed by networkdevice 102. In one embodiment, CPU 114 executes software (e.g., program,code, instructions, etc.) that is configured to handle processing of FDPpackets. According to an embodiment of the present invention, FPH module116 assists CPU 114 in FDP packets-related processing, includingprocessing of incoming FDP packets and transmission of FDP packets. FPHmodule 116 may be implemented as a field programmable logic device(FPLD) such as a programmed field-programmable gate array (FPGA) deviceor an ASIC.

In one embodiment, FPH module 116 is configured to filter FDP packetsreceived by network device 102 and bound for CPU 114 such that only asubset of received FDP packets are forwarded to CPU 114 for processing,the other FDP packets are dropped by FPH module 116 and not forwarded toCPU 114. In one embodiment, FPH module 116 receives CPU-bound packetsand identifies FDP packets from other CPU-bound packets. For a packetidentified as an FDP packet, FPH module 116 determines whether thepacket needs to be sent to CPU 114. If FPH module 116 determines thatthe FDP packet need not be forwarded to CPU 114, the FDP packet isdropped and not sent to CPU 114, thereby relieving CPU 114 from havingto process the packet. An FDP packet is forwarded to CPU 114 only if FPHmodule 116 determines that the packet cannot be consumed by FPH module116 and needs to be forwarded to CPU 114 for inspection. In this manner,only a small subset of FDP packets received by network device 102 isforwarded to CPU 114 for processing. This reduces the amount ofprocessing that CPU 114 has to do to process FDP packets received bynetwork device 102.

FPH module 116 is also configured to assist in transmission of FDPpackets from network device 102. For each FDP session in which networkdevice 102 participates, FDP packets for that session are transmittedfrom network device 102 at periodic time intervals associated with theFDP for that session. The time intervals may be different for differentFDP sessions. In this manner, the task of transmitting FDP packets ispartially or completely offloaded from CPU 114 of network device 102.

By assisting in processing of incoming FDP packets, FPH module 116reduces the number of incoming FDP packets that CPU 114 has to process,thereby freeing CPU cycles for other tasks performed by CPU 114. FPHmodule 116 also offloads the task of transmitting FDP packets from CPU114. In this manner, the amount of FDP packets-related processing thatCPU 114 has to perform is reduced. This enables network device 102 tosupport various FDPs including FDPs with shorter periodic intervalrequirements (e.g., periodic time intervals measured in milliseconds oreven faster). Network device 102 comprising a FPH module 116 may coexistin a network with other network devices that may or may not comprise FPHmodules.

FIG. 2 depicts a simplified block diagram of a network device 102incorporating an embodiment of the present invention. FIG. 2 is merelyillustrative of an embodiment incorporating the present invention anddoes not limit the scope of the invention as recited in the claims. Oneof ordinary skill in the art would recognize other variations,modifications, and alternatives. Network device 102 may be embodied as aswitch or router, such as routers and switches provided by FoundryNetworks®, Inc. of Santa Clara, Calif.

As depicted in FIG. 2, network device 102 comprises one or more ports202, a traffic manager (TM) module 204, an FDP packet handler (FPH)module 116, and a CPU 114 with associated memory 206 (e.g., SDRAM).Network device 102 receives data, including FDP packets, via one or moreports 202. Network device 102 may receive multiple streams of FDPpackets concurrently from one or more sources for one or more FDPsessions. An FDP packet received from a source may comprise an FDPsession identifier identifying the FDP session for which the packet isreceived. Ports 202 are also used to transmit data, including FDPpackets, from network device 102.

Network device 102 may support two data processing paths including areceive path (Rx path) and a transmit path (Tx path). Processing for thetwo paths may be performed in parallel. The Rx path is a path traversedby a packet from a port of network device 102 towards CPU 114 of networkdevice 102. The Tx path is a path traversed by a packet from CPU 114towards a port of network device 102.

In one embodiment, in the Rx path, packets received by network device102 via one or more ports 202 (or a subset of the received packets) areforwarded to TM module 204. These packets may include CPU-bound packets(i.e., packets to be forwarded to CPU 114 for processing) and otherpackets. TM module 204 is configured to forward the CPU-bound packets toFPH module 116. The CPU-bound packets may include FDP packets, packetsthat enable CPU 114 to learn network topologies, and other types ofpackets. In the Tx path, TM module 204 is configured to receive packets,including FDP packets, from FPH module 116. The packets are thenforwarded to their destinations, which may include one or more ports 202of network device 102. The packets, including FDP packets, are thentransmitted from network device 102 using the destination ports.

FPH module 116 is configured to assist with processing related to FDPpackets. In one embodiment, FPH module 116 is implemented in hardware.For example, FPH module 116 may be implemented as a field programmablelogic device (FPLD) such as a programmed field-programmable gate array(FPGA) device. FPH module 116 may also be implemented as an ASIC. Asdepicted in FIG. 2, FPH module 116 is positioned in the Rx path betweenTM module 204 and CPU 114 and in the Tx path between CPU 114 and TMmodule 204. This enables FPH module 116 to receive all CPU-bound packetsin the Rx path, including all FDP packets received by network device102, prior to the packets being forwarded to CPU 114.

Processing of Incoming FDP Packets

In the Rx path, FPH module 116 receives CPU-bound packets from TMInterface module 204. From the packets received from TM module 204, FPHmodule 116 is configured to identify FDP packets. FPH module 116 may usedifferent techniques to identify FDP packets. For example, in oneembodiment, contents of a packet, including the header and/or thepayload of the packet, may be examined to determine if the packet is anFDP packet. For example, a BSD packet comprises a UDP header specifyinga destination port that identifies the packet as a BSD packet andaccordingly an FDP packet. For an 802.1ag packet, fields in the packetare used to identify if the packet is an 802.1ag packet.

For a packet identified as an FDP packet, FPH module 116 determines ifthe FDP packet needs to be forwarded to CPU 114 or whether the FDPpacket can be dropped without forwarding to CPU 114. Various differenttechniques may be used by FPH module 116 to determine if a packet needsto be forwarded to CPU 114. The techniques may be different fordifferent FDPs. According to one technique, a portion of the FDP packetis compared with preconfigured reference information and the results ofthe comparison are used to determine if the FDP packet needs to be sentto CPU 114 or if the packet can be dropped without sending it to CPU114. As part of the comparison, FPH module 116 is configured todetermine if a portion of an FDP packet received for a session matches acorresponding entry in the reference information for that session. Inone embodiment, a match indicates that the FDP packet need not beforwarded to the CPU. In such a case, the FDP packet for that session isdropped and not forwarded to CPU 114. As a result, CPU 114 does notreceive the FDP packet and consequently does not have to process thedropped packet. In one embodiment, if the portion of the FDP packetbeing compared does not match information in the reference information,then FPH module 116 forwards the FDP packet to CPU 114. In such ascenario, FPH module 116 may also raise an interrupt signaling to CPU114 that a packet is being forwarded to CPU 114.

Different techniques may be used to forward an FDP packet from FPHmodule 116 to CPU 114. In one embodiment, a direct memory access (DMA)technique may be used to forward the packet to CPU 114. FPH module 116may DMA the packet to a buffer stored in memory 106 associated with CPU114. CPU 114 may then read the packet from memory 206. Various othertechniques may also be used to forward FDP packets to CPU 114.

The reference information that is used by FPH module 116 to determinewhether or not an FDP packet for a session needs to be forwarded to CPU114 may be preconfigured and programmed by software executed by CPU 114.The reference information may comprise various rules configured by thesoftware for various types of FDP sessions. The reference informationmay be stored in different formats. In one embodiment, the referenceinformation is stored as a table with each row entry in the tablecorresponding to an FDP session. In one embodiment, the referenceinformation is stored by FPH module 116. The reference information mayalso be stored in other memory locations accessible to FPH module 116.For example, in one embodiment, the reference information may be storedin one or more memories 206 associated with CPU 114.

FIG. 3 depicts a simplified flowchart 300 showing a method performed byFPH module 116 for processing a CPU-bound packet in the receive (Rx)path according to an embodiment of the present invention. As depicted inFIG. 3, processing is initiated when FPH module 116 receives a CPU-boundpacket (step 302). For the embodiment depicted in FIG. 2, processing maybe initiated when a CPU-bound packet is received by FPH module 116 fromTM module 204.

FPH module 116 then determines if the packet is an FDP packet (step304). As previously described, various different techniques may be usedto determine if a packet is an FDP packet. For example, informationstored in the header and/or payload of the packet may be used todetermine if the packet is an FDP packet. As part of 304, FPH module 116may also determine a particular FDP (e.g., BFD or 802.1ag, or other) towhich the packet belongs. If it is determined in 304 that the packet isnot an FDP packet, then the packet is forwarded to CPU 114 (step 306)and processing ends. Various different techniques such as DMA techniquesand others may be used to forward the packet to CPU 114.

If it is determined in 304 that the packet is an FDP packet, then aportion of the packet is compared with information stored in referenceinformation (step 308). The reference information may be stored by FPHmodule 116 or may be stored in some memory location accessible to FPHmodule 116. The portion of the packet being compared may include aportion of the header of the packet and/or a portion of the payload ofthe packet. In one embodiment, the packet information is compared withreference information configured for the FDP session for which thepacket is received.

Different types of reference information may be stored and used for thecomparison for different FDPs. Accordingly, in 308, the referenceinformation that is used for the comparison may depend on the FDPcorresponding to the FDP packet. For example, the reference informationused for a BFD packet is different from the reference information usedfor an 802.1ag packet.

Based upon the results of the comparison performed in 308, adetermination is made if the packet is to be forwarded to CPU 114 (step310). In one embodiment, if the portion of the FDP packet being comparedmatches information in the reference information for that FDP then thisindicates that the packet is not to be forwarded to CPU 114. If howeverthe portion of the packet being compared does not match information inthe reference information then the packet is identified to be forwardedto CPU 114. If it is determined in 310 that the packet is to beforwarded to CPU, then the FDP packet is forwarded to CPU 114 accordingto step 306 and processing terminates. If it is determined in 310 thatthe packet is not to be forwarded to CPU, then the FDP packet is droppedand not forwarded to CPU 114 (step 312) and processing terminates.

The processing depicted in FIG. 3 and described above may be repeatedfor each packet received by FPH module 116. As a result of theprocessing depicted in FIG. 3 and described above, only a subset ofCPU-bound FDP packets received by FPH module 116 may need to beforwarded to CPU 114 for processing. In this manner, CPU 114 may notreceive each FDP packet received by network device 102 thereby reducingthe number of incoming FDP packets that need to be processed by CPU 114.

Determining Non-Receipt of FDP Packets

FPH module 116 is also configured to monitor non-receipt of FDP packets.FPH module 116 is configured to monitor and take appropriate actions insituations where an FDP packet for an FDP session is not received bynetwork device 102 within a periodic time interval for that FDP session.As previously described, an FDP specifies a periodic time interval inwhich packets for that FDP are to be transmitted and received. When anFDP packet is not received within the expected time interval, FPH module116 is configured to signal such an occurrence to CPU 114 since it mayindicate a network failure.

As previously described, a network device such as network device 102depicted in FIG. 2 may be involved in one or more FDP sessions. Each FDPsession may have its own associated periodic time interval within whichFDP packets should be received for that session. FPH module 116 isconfigured to monitor and track the receipt of FDP packets for each ofthe sessions and raise a signal if an FDP packet is not received withinthe time interval for a session.

FPH module 116 may use different techniques to monitor receipt andnon-receipt of FDP packets information for various FDP sessions. In oneembodiment, FPH module 116 maintains a pair of timers for each session.The pair of timers includes a first timer (interval_limit timer) thatindicates a time interval_limit within which an FDP packet should bereceived for that session. This timer is typically programmed bysoftware executed by the CPU of the network device. The pair of timersalso includes a second timer (last_received timer) that is used by FPHmodule 116 to monitor the time that it has waited to receive an FDPpacket for the session since the last_receipt of an FDP packet for thatsession. When an FDP packet for that session is received, thelast_received timer is reset by FPH module 116. FPH module 116iteratively checks the values of the interval_limit timer and thelast_received timer for each of the FDP sessions in which the networkdevice participates. During each iteration for a session, FPH module 116checks if the last_received timer for a session has reached theinterval_limit timer for that session. When the last_received timerreaches or exceeds the interval_limit timer, it indicates that the FDPpacket for the session was not received in the expected time intervaland FPH module 116 signals this to CPU 114. The FDP session may beconsidered to have expired due to the non-receipt of an FDP packet. Inone embodiment, an interrupt is generated by FPH module 116 to flag thatthe particular FDP session has expired possibly due to some failure inthe network (e.g., a link is down). If the last_received timer has notreached he interval_limit timer, then the last_received timer isincremented. In this manner, the timers are used to monitor receipt andnon-receipt of FDP packets for each FDP session. The timers informationmay be stored by FPH module 116 or in some memory location accessible toFPH module 116.

FIG. 4 depicts a simplified flowchart 400 showing a method performed byFPH module 116 for detecting non-receipt of FDP packets for an FDPsession according to an embodiment of the present invention. FIG. 4depicts processing performed at each iteration by FPH module 116. Asdepicted in FIG. 4, at each iteration, FPH module 116 checks if thelast_received timer equals or exceeds the interval_limit timer (step402). If it is determined in 402, that the last_received timer has notreached the interval_limit timer (i.e., the last_received timer is lessthan the interval_limit timer), the last_received timer is incremented(step 404). The amount by which the last_received timer is incrementeddepends upon the time frequency at which FPH module 116 performs theiterations. For example, if FPH module 116 checks the timers for asession every 1 msec, then the last_received timer is incremented by 1msec, if the check is performed every 50 msecs then the last_receivedtimer is incremented by 50 msecs, and so on. If it is determined in 402,that the last_received timer has reached or exceeded the interval_limittimer (i.e., the last_received timer is equal to or greater than theinterval_limit timer) then this indicates that an FDP packet for thesession has not been received within the time interval window for thatparticular FDP session and a signal is raised to indicate that the FDPsession has expired (step 406). As also shown in FIG. 4, thelast_received timer for an FDP session is reset to zero upon receipt ofan FDP packet for that session within the interval_limit timer period.

The processing depicted in FIG. 4 is repeated by FPH module 116 for eachof the FDP sessions at periodic intervals such as every one millisecond,every 50 milliseconds, etc. In one embodiment, the frequency at whichthe timers information is checked for a session is programmable. Aspreviously indicated, FPH module 116 may monitor timers for multiple FDPsessions. The frequency with which FPH module 116 checks the timersinformation for the sessions may also be automatically determined basedupon the interval_limit timers for the various sessions. For example, inone embodiment, the iteration frequency may be set to the least commondenominator of the various interval_limit timers being tracked for thevarious sessions by FPH module 116. For example, if three FDP sessionsare being tracked having interval_limit timers of 4 msecs, 6 msecs, and12 msecs, then the frequency at which the iterations are performed maybe set to 2 msecs, which is the least common denominator for the threeinterval_limit timers. In this manner, the frequency is programmableand/or may be automatically determined from the interval_limit timers.

As described above, in the Rx path, FPH module 116 handles processing ofFDP packets received by a network device and also non-receipt of FDPpackets. In the Tx path, FPH module 116 may receive packets from CPU 114and forward the packets to TM module 204. TM module 204 may then forwardthe packets to the appropriate destinations for the packets.

Transmission of FDP Packets

FPH module 116 is also configured to assist in transmission of FDPpackets for the various FDP sessions in which network device 102participates. In this manner, the FDP packets transmission task isoffloaded from CPU 114. In order to facilitate transmission of FDPpackets, in one embodiment, FPH module 116 maintains a pair of timersfor each FDP session. The pair of timers includes a first timer(trx_interval timer) that indicates the periodic transmission intervalfor transmitting an FDP packet for that FDP session. The trx_intervaltimer may be different for the different FDP sessions handled by thenetwork device. This timer is typically programmed by software executedby CPU 114. The pair of timers also includes a second timer (last_senttimer) that is used by FPH module 116 to monitor the time when an FDPpacket was last transmitted by network device 102 for the FDP session.The two timers for each session are iteratively checked at periodicintervals to determine when to transmit an FDP packet for that session.In one embodiment, when the last_sent timer is equal to the trx_intervaltimer, FPH module 116 transmits an FDP packet for that session and thelast_sent timer is reset to zero to restart the count. The FDP packettransmitted by FPH module 116 for a session is forwarded to TM module204 and then to a destination port of network device 102. The FDP packetis then forwarded from network device 102 using the destination port. Inthis manner, FPH module 116 facilitates transmission of FDP packets fromnetwork device 102 for the various FDP sessions at periodic intervalsassociated with the FDP sessions.

FIG. 5 depicts a simplified flowchart 500 showing a method performed byFPH module 116 for transmitting FDP packets for an FDP session fromnetwork device 102 according to an embodiment of the present invention.FIG. 5 depicts processing performed at each iteration by FPH module 116.As depicted in FIG. 5, at each iteration, FPH module 116 checks if thelast_sent timer has reached the trx_interval timer (step 502). If it isdetermined in 502, that the last_sent timer has not reached thetrx_interval timer (i.e., the last_sent timer is less than thetrx_interval timer), the last_sent timer is incremented (step 504). Theamount by which the last_sent timer is incremented depends upon the timefrequency at which FPH module 116 checks the timers for the session. Forexample, if FPH module 116 checks the timers for a session very 1 msec,then the last_received timer is incremented by 1 msec, if the iterationis performed every 50 msecs then the last_received timer is incrementedby 50 msecs, and so on. If it is determined in 502 that the last_senttimer has reached the trx_interval timer (i.e., the last_sent timer isequal to the trx_interval timer), this indicates that it is time totransmit an FDP packet for the session and an FDP packet is transmitted(step 506). In one embodiment, as part of 506, FPH module 116 transmitsan FDP packet for the session to TM module 204. The FDP packet is thenforwarded to a port of the network device and transmitted from thenetwork device via the port. After an FDP packet transmission, thelast_sent timer is reset to zero to restart the countdown for the nexttime an FDP packet is to be sent for the session (step 508). Theprocessing depicted in FIG. 5 is repeated at each iteration.

The processing depicted in FIG. 5 and described above may be performedby FPH module 116 at periodic intervals for each FDP session of networkdevice 102. The frequency at which the processing is performed may beevery one millisecond, every 50 milliseconds, etc. In one embodiment,the frequency at which FPH module 116 performs the processing depictedin FIG. 5 is programmable. The frequency may also be automaticallydetermined based upon the trx_interval timers for the various sessions.For example, the processing frequency may be set to the least commondenominator of the various trx_interval timers for the various FDPsessions of network device 102. For example, if three FDP sessions arebeing handled having trx_interval timers of 20 msecs, 40 msecs, and 100msecs, then the frequency at which the iterations are performed may beset to 20 msecs. In this manner, the frequency is programmable and/ormay be automatically determined from the trx_interval timers.

As depicted in FIG. 5 and described above, FPH module 116 handlestransmission of FDP packets at regular intervals for the various FDPsessions of network device 102. The sessions may correspond to differentFDPs. Software executed by CPU 114 typically pre-configures the periodicintervals at which FDP packets are to be sent for the FDP sessions andFPH module 116 handles the transmission of FDP packets for the sessions.The periodic time interval for a session at which FDP packets aretransmitted for that session may be measured in seconds (e.g., every 1second, every 5 seconds, etc.) or even faster than one second such asmeasured in milliseconds (e.g., every 1 msec, every 5 msecs, etc.), orsome other faster or slower time period. In this manner, the FDP packetstransmission task is offloaded from CPU 113 by FPH module 116.

Various different memory structures may be used to facilitate automatedtransmission of FDP packets. In one embodiment, CPU 114 may providemultiple priority queues for transmitting packets. Each priority queueis implemented as a linked list that contains a set of descriptorentries. In one embodiment, one or more such linked list priority queuesare assigned to FPH module 116 to facilitate transmission of FDPpackets. FIG. 6 depicts an example of a linked list priority queue 600that may be used by FPH module 116 to facilitate transmission of FDPpackets according to an embodiment of the present invention. As depictedin FIG. 6, linked list 600 comprises a set of descriptor entries 602.Each entry 602 corresponds to and stores information for an FDP sessionfor which an FDP packet is to be transmitted. Each entry 602 comprises:(1) a buffer pointer 604 pointing to a memory location 614 storing thecorresponding FDP packet; (2) buffer size information 606 identifyingthe size of the corresponding FDP packet; (3) timers information 608;(4) command/status information 610; and (5) a pointer 612 pointing tothe next entry in the linked list. Pointer 612 is used to traverse theentries in linked list 600. In one embodiment, linked list 600 may beimplemented as a circular linked list wherein pointer 612 of the lastentry in the linked list points to the first entry in the linked list.For a session, FPH module 116 uses the information stored in the entry602 for the session to transmit FDP packets for that session in anautomated manner that does not require CPU processing.

Timers information 608 in an entry stores the trx_interval timer and thelast_sent timer values for the FDP session corresponding to the entry.The trx_interval timer value for the session is initialized by softwareexecuted by CPU 114. As previously described, the trx_interval andlast_sent timers are used by FPH module 116 to determine when to send anFDP packet for the session.

According to an embodiment of the present invention, a base timer may beassociated with linked list 600 used by FPH module 116 to transmit FDPpackets. The base timer for a linked list determines the interval atwhich the entries in the linked list are visited and checked by FPHmodule 116. For example, if the base timer for linked list 600 depictedin FIG. 6 is 5 msecs, then FPH module 116 visits each entry in thelinked list every 5 msecs. FPH module 116 may start with one entry inthe linked list and then use next pointer 612 to traverse through thevarious entries in the linked list. For a linked list with an associatedbase timer, the trx_interval and last_sent timer values stored for eachentry in the linked list may be expressed as multiples of the base timervalue. For example, if the base timer value associated with linked list600 is 5 msecs, then the trx_interval and last_sent timer values inentries 602 may be expressed as a multiple of the base timer 5 msecs.For example, if the periodic time interval for transmitting an FDPpacket for a session is 20 msecs, then trx_interval for that session maybe expressed as (4* base timer). In one embodiment, the base timer for alinked list is determined based upon the trx_interval timers for thevarious session entries in the linked list as the least commondenominator of the trx_interval timer values.

Command/status information 610 may store other information related tothe FDP session. For example, if the FDP session requires any specialprocessing then that information may be stored in information 610.

Various other types of data structures may also be used to facilitateFDP packets transmission in alternative embodiments. For example, in oneembodiment multiple linked lists may be used by FPH module 116 tofacilitate transmission of FDP packets, each with its own associatedbase timer. In one embodiment using two linked lists, one linked listmay have an associated base timer of 1 msec and the other may have anassociated base timer of 50 msecs. A session may be allocated to one ofthe two linked lists based upon the trx_interval timer values associatedwith the session. For example, an FDP session having a trx_intervaltimer of 100 msecs may be allocated to the linked list having anassociated base timer of 50 msecs whereas an FDP session having atrx_interval timer of 6 msecs may be allocated to the linked list havingan associated base timer of 1 msec. In one embodiment, FPH module 116may also be configured to transmit FDP packets for all the FDP sessionentries in a liked list at once (referred to as a “one-shot”transmission).

New entries may be added to a transmission linked list as more FDPsessions are initiated. In one embodiment, when a new entry is to beadded to a linked list, the transmit functionality is disabled for thelinked list to which the entry is to be added. In one embodiment, aone-shot transmission may be first performed for the linked list priorto the disabling. The new entry is then added to the linked list. Thetransmit operations for the linked list, now with the new entry for anew session, are then enabled. The trx_interval timer information for asession entry in the linked list may also be changed by softwareexecuted by the CPU of a network device.

As described above, FPH module 116 offloads some of the FDPpackets-related processing that was conventionally performed by softwareexecuted by a CPU of a network device. In the Rx path, FPH module 116determines if an FDP packet received by network device 102 needs to beprovided to CPU 114 for processing. If it is determined that the FDPpacket does not need to be forwarded to CPU 114 then the FDP packet isdropped. If instead, it is determined that the FDP packet needs to beforwarded to CPU 114 then FPH module 116 forwards the packet to CPU 114.

Processing Using Dual Ring Structures

Various data structures may be used by FPH module 116 to facilitateprocessing of FDP packets in the Rx path. According to an embodiment ofthe present invention, a dual ring structure is used to facilitate theprocessing. A dual ring structure may comprise two rings, with each ringbeing a circular linked list of entries. FIG. 7 depicts a two ringstructure 700 that may be used by FPH module 116 to facilitateprocessing of FDP packets in the receive (Rx) path according to anembodiment of the present invention. As depicted in FIG. 7, structure700 comprises a first ring 702 (referred to as a CPU_assist ring) and asecond ring 704 (referred to as the CPU ring). CPU_assist ring 702comprises a number of entries storing information related to FDP packetsreceived by FPH module 116. The processing of CPU_assist ring 702 ishandled by FPH module 116. CPU ring 704 comprises several entriesstoring information for FDP packets (and possibly for other packets)that are to be processed by CPU 114. CPU 114 handles the processing ofCPU ring 704.

The number of entries in the two rings may be user-configurable. Theentries are sometimes referred to as descriptor entries as they storeinformation describing FDP packets. The number of entries in CPU_assistring 702 is generally greater than the number of entries in CPU ring704.

CPU_assist ring 702 is used by FPH module 116 to process FDP packetsreceived by the network device and by FPH module 116 in the Rx path.CPU_assist ring 702 comprises a number of entries (“m” entries depictedin FIG. 7) for storing information used for processing FDP packets. Asdepicted in FIG. 7, CPU_assist ring 702 may be implemented as a circularlinked list of entries storing information related to FDP packets. TheFDP packets themselves may be buffered in buffer memory 710. When an FDPpacket is received by a network device, the packet is stored in buffermemory 710 that is accessible to FPH module 116 and informationcorresponding to the buffered FDP packet is stored in an entry ofCPU_assist ring 702. FPH module 116 then manages processing of the FDPpackets using the entries in CPU_assist ring 702.

Buffer memory 710 used for buffering the FDP packets may be located inFPH module 116 or in some other location accessible to FPH module 116.In embodiments where the memory resources of FPH module 116 are limited,buffer memory 710 may be stored for example in a memory (e.g., SDRAM206) associated with CPU 114.

In one embodiment, each entry in CPU_assist ring 702 for an FDP packetbuffered in memory 710 comprises the following information: (1) a bufferpointer 708 pointing to the location in buffer memory 710 storing theFDP packet corresponding to the entry; (2) a “processed bit” 706indicating if the FDP packet corresponding to the entry has beenprocessed by FPH module 116; and (3) a next pointer 712 pointing to thenext descriptor entry in CPU_assist ring 702.

Processed bit 706 in an entry is used to identify the processing statusof the FDP packet corresponding to the entry. In one embodiment, if thebit is set to 0 (zero), it indicates that the FDP packet correspondingto the entry needs to be processed. If the bit is set to 1 (one), itindicates that the FDP packet for the entry has already been processedand the entry is available for storing information for a new FDP packet.The bit is set to 1 (one) after the FDP packet has been processed.

A process_start_address pointer and a dma_start_addr pointer may also beprovided (not shown in FIG. 7) and function as read and write pointersfor CPU_assist ring 702 respectively. The dma_start_addr points to theentry in ring 702 that is available for storing information for anincoming FDP packet. The process_start_address points to the next entryin ring 702 that is available for storing information for an incomingFDP packet. FPH module 116 uses these pointers to traverse CPU_assistring 702 and process entries corresponding to buffered FDP packets.

FPH module 116 traverses CPU_assist ring 702 at regular time intervalsto process FDP packets corresponding to entries in CPU_assist ring 702.For an unprocessed entry (as indicated by processed bit set to 0 in theentry), FPH module 116 uses the buffer pointer of the entry to accessthe corresponding FDP packet stored in buffer memory 710. A portion ofthe FDP packet is then selected and compared to information stored inreference information for the FDP. As described above, if there is amatch, it indicates that the FDP packet need not be provided to CPU 114and can be dropped. In this event, processed bit 706 of the entry inCPU_assist ring 702 is set to 1 to indicate that the FDP packetcorresponding to the entry has been processed and the FDP packet isdropped.

If there is no match, it indicates that the FDP packet is to be providedto CPU 114. In this case, a buffer swap is performed between the bufferpointed to by the entry in CPU_assist ring 702 and a free entry in CPUring 704. In one embodiment, as a result of the swap, a buffer pointerin a previously available entry in CPU ring 704 is made to point to abuffer memory location pointed to by the buffer pointer in the entry inCPU_assist ring 702. In this manner, after the buffer swap, a bufferpointer in an entry in CPU ring 704 now points to the location of thebuffered FDP packet. For example, in FIG. 7, buffer pointer 714 of CPUring 704 points to the FDP packet stored in buffer memory 710. CPU 114may then access the FDP packet from buffer memory 710 and process theFDP packet. After the buffer swap, processed bit 706 in the entry inCPU_assist ring 702 is set to 1 to indicate that the entry is availablefor storing information for a new FDP packet and the buffer pointer forthe entry is freed.

There may be situations where there are no available entries in CPU ring704 for performing the buffer swap. This may occur for example when CPU114 is backed up in its processing and is unable to process the FDPpackets pointed to by entries in CPU ring 704 in a timely manner. Thisscenario may arise due to the rate at which FDP packets are received bythe network device exceeding the rate at which CPU 114 is able toprocess the FDP packets. In such a scenario, FPH module 116 drops thebuffered FDP packet corresponding to the entry in CPU_assist ring 702whose pointer is to be swapped. FPH module 116 then continues processingof the next entry in CPU_assist ring 702 corresponding to the nextunprocessed FDP packet. In this manner, FPH module 116 is able tocontinue processing the incoming FDP packets even if CPU 114 is backedup. This minimizes the number of incoming FDP packets that are droppeddue to CPU 114 being busy.

The dual ring structure depicted in FIG. 7 and described above decouplesreceipt of FDP packets by network device 102 from processing of FDPpackets by CPU 114 of the network device. FDP packets received by anetwork device are buffered in buffer memory 710 and correspondingentries stored in CPU_assist ring 702 which is handled by FPH module116. Buffering of FDP packets and processing of the packets by FPHmodule 116 is done separately from the processing of FDP packetsperformed by CPU 114 using CPU ring 704. In this manner, CPU 114 maycontinue to process FDP packets (or perform other functions) using CPUring 704 while FDP packets are being received and buffered by thenetwork device. The decoupling enables FDP packets to be receivedwithout being concerned about the status of CPU 114. Accordingly, FDPpackets may be received by a network device at a rate that is fasterthan the rate at which the CPU of the network device can process the FDPpackets. Even if CPU 114 is backed up processing FDP packets orperforming other tasks, FDP packets may continue to be received andprocessed by FPH module 116 using CPU_assist ring 702. As a result,incoming FDP packets do not have to be dropped due to CPU 114 being tiedup with other processing activities (including processing of previouslyreceived FDP packets). This is particularly useful given the burstynature of FDP packets. The decoupling also enables CPU 114 to processFDP packets without being hindered by the frequency at which the FDPpackets are received by the network device. Further, only those FDPpackets that need to be sent to CPU 114 are sent to CPU ring 704 fromCPU_assist ring 702. In this manner, CPU 114 does not see or process FDPpackets that do not need to be sent to CPU 114.

FIG. 8 is simplified block diagram of a FPH module 116 according to anembodiment of the present invention. FPH module 116 includes a number ofmodules including a TM Interface module 802, a Packet Inspection module804, a Receive (Rx) Handler module 806, a Transmit (Tx) Handler module808, and a CPU interface module 810. FIG. 8 is merely illustrative of anembodiment incorporating the present invention and does not limit thescope of the invention as recited in the claims. One of ordinary skillin the art would recognize other variations, modifications, andalternatives. FPH module 116 may be incorporated in a network devicesuch as a switch or router, such as routers and switches provided byFoundry Networks®, Inc. of Santa Clara, Calif.

TM Interface module 802 provides an interface for receiving packets fromand transmitting packet to TM module 204. In the Rx path, TM Interfacemodule 802 receives CPU-bound packets, including FDP packets, from TMmodule 204. The incoming packets may be buffered in Rx FIFO 816 foranalysis. TM Interface module 802 identifies FDP packets from theCPU-bound packets received from TM module 204. Packets that are not FDPpackets are forwarded to Rx handler module 806 for forwarding to CPU114. For a packet identified as an FDP packet, TM Interface module 802presents a portion of the FDP packet to Packet Inspection module 804 foranalysis. In one embodiment, this is done by presenting an offset intothe FDP packet to Packet Inspection module 804. The offset isprogrammable and may be different for different FDPs. The portion of theFDP packet presented to Packet Inspection module 804 may include aportion of the header of the FDP packet, a portion of the payload of theFDP packet, or even the entire FDP packet. The portion of the FDP packetgenerally includes the session identifier for the packet.

Packet Inspection module 804 is configured to take the portion of theFDP packet received from TM Interface module 802 and compare informationin the portion with reference information that has been programmed bysoftware running on CPU 114. The reference information may be stored byPacket Inspection module 804 (e.g., reference information 812 depictedin FIG. 8) or alternatively may be stored in a memory locationaccessible to Packet Inspection module 804. In one embodiment, thereference information may store one or more session entries fordifferent FDP sessions.

Packet Inspection module 804 may use an indexing scheme to perform thecompare operation. In one embodiment, a part of the portion of the FDPpacket received from TM Interface module 802 is used as an index intothe reference information to identify an entry in the referenceinformation corresponding to a particular session. The size of the indexmay vary based upon the number of session entries in the referenceinformation. For example, a 9-bit index is needed for indexing 512reference information entries. The information stored in a particularsession entry identified using the index is then compared to theinformation in the portion of the FDP packet received from TM Interfacemodule 802 to determine if there is a match. Results of the match areprovided to TM Interface module 802. The results identify whether or notthe information in the portion of the FDP packet matched the informationin the particular session entry indexed by the FDP packet portion.

As described above, TM Interface module 802 receives a result responsefrom Packet Inspection module 804 indicating whether or not the FDPpacket information matched the corresponding information in thereference information. If the received result indicates a match, thenthis indicates to TM Interface module 802 that the particular FDP packetcan be dropped and need not be forwarded to CPU 114. TM Interface module802 then drops the FDP packet and flushes Rx FIFO 816 bufferscorresponding to the FDP packet. The FDP packet is dropped withoutnotifying CPU 114 about the packet. If the result received from PacketInspection module 804 indicates that the FDP packet information did notmatch information in the session entry in the reference information, TMInterface module 802 forwards the FDP packet to Rx handler module 806for forwarding to CPU 114.

TM Interface module 802 is also configured to flag an error when an FDPpacket for an FDP session is not received within a periodic timeinterval corresponding to the FDP session. In one embodiment, for eachFDP session handled by the network device, TM Interface module 802stores information (e.g., timers information) tracking when the last FDPpacket for the session was received and when the next FDP packet is dueto be received. If the next FDP packet for that session is not receivedwithin the time interval for that FDP session, then an error is flagged.CPU 114 may be notified about the error.

Rx Handler 806 is configured to receive CPU-bound packets, including FDPpackets, from TM Interface module 802 and provide the packets to CPUInterface module 810 for forwarding to CPU 114. Rx Handler 806 may alsocomprise a FIFO for storing the CPU-bound packets before being forwardedto CPU 114.

CPU Interface module 810 is configured to forward packets to CPU 114. Inone embodiment, a DMA technique is used to forward packets to CPU 114.In such an embodiment, CPU Interface Module 810 acts as a DMA enginethat DMAs the packets to CPU 114. In one embodiment, the packet iswritten to a memory 206 associated with CPU 114 from where the packetcan be accessed by CPU 114. Different interfaces may be used to forwardpackets from FPH module 116 to CPU 114. For example, in one embodiment,a PCI bus interface may be used to forward packets to CPU 114. In suchan embodiment, CPU Interface Module 810 may comprise PCI-related modulesfor forwarding packets to CPU 114. In one embodiment, the DMA engine ispart of Rx handler 806 and CPU interface module 810 initiates the DMAprocess.

CPU Interface Module 810 is also configured to receive packets from CPU114. These packets are then forwarded to Tx Handler module 808. TxHandler module 808 may comprise a FIFO for storing the packets. Thepackets are then forwarded to TM Interface module 802. In oneembodiment, Tx Handler module 808 comprises a DMA engine that retrievesFDP packets from the CPU SDRAM. TM Interface module 802 may comprise aTx FIFO 818 for storing the packets prior to transmission. A descriptorentries scheme may be used for retrieving and storing the packets. TMInterface module 204 then forwards the packets to TM module 204. Thepackets may then be forwarded to the appropriate destination ports andtransmitted from network device 102 via the destination ports.

According to an embodiment of the present invention, Tx Handler module808 is configured to handle transmission of FDP packets from networkdevice 102 for various FDP sessions. In one embodiment, Tx Handlermodule 808 maintains a pair of timers for each FDP session handled bythe network device. As previously described, the pair of timers mayinclude a trx_interval timer that indicates that transmission intervalfor transmitting an FDP packet for that FDP session and a last_senttimer that is used to monitor the time when an FDP packet was lasttransmitted by the network device for the FDP session. The two timersfor each session are iteratively checked at periodic intervals todetermine when to transmit an FDP packet for each session.

Tx Handler module 808 may use different structures to facilitateautomated transmission of FDP packets. For example, in one embodiment,one or more circular linked lists (such as linked list 600 depicted inFIG. 6 and described above) may be provided to facilitate thetransmission. Multiple linked lists may also be used, each with anassociated base timer. The base timer for a linked list determines thefrequency at which Tx Handler 808 visits and checks the entries in thelinked list. For example, a list having an associated base timer of1-msec is checked every 1-msec, a list having an associated base timerof 50 msecs is checked every 50 msecs, a list having an associated basetimer of 200 msecs is checked every 200 msecs, and so on. In oneembodiment, two linked lists are used: a first linked list having a 1millisecond based timer and a second linked list having a 50milliseconds base timer may be used. The entries in the 1-msec linkedlist are checked by Tx Handler module 808 every 1 msec. This linked listmay store entries for FDP sessions whose periodic transmission intervalsare multiples of 1 msec, e.g., 4 msecs, 15 msecs, etc. The 50-mseclinked list entries are checked by Tx Handler module 808 every 50 msecs.This linked list may store entries for FDP sessions whose periodictransmission intervals are multiples of 50 msecs, e.g., 100 msecs, 250msecs, etc.

The FDP packets transmitted by Tx Handler 808 are forwarded to TMInterface module 802 and then to TM module 204. The FDP packets are thenforwarded to one or more ports of the network device and thentransmitted from the network device using the one or more ports.

As described above, embodiments of the present invention reduce theamount of FDP packets-related processing that a CPU of a network devicehas to perform. For incoming FDP packets, FPH module 116 assists the CPUby reducing the number of incoming FDP packets that a CPU has toprocess. FPH module 116 is also able to flag when an FDP packet for anFDP session is not received within the periodic time interval for thesession. FPH module 116 also handles transmission of FDP packets forvarious sessions at regular time intervals. The FDP packets transmissiontask is thus offloaded from the CPU of the network device. This furtherreduces the processing cycles that the CPU of the network device has tospend on FDP-packets related processing. This enables the network deviceto be able to support newer FDPs such as 802.1ag and BFD having veryshort periodic time intervals for transmission of FDP packets (e.g.,faster than 1 second, more typically in milliseconds such as 1millisecond, 5 milliseconds, or even shorter) without adverselyaffecting CPU performance. Accordingly, embodiments of the presentinvention enable a network device to process reception and transmissionof FDP packets that may be received and transmitted at a rate fasterthan 1 FDP packet per second. Embodiments of the present invention areable to handle FDPs having periodic time intervals that may be one ormore milliseconds (msecs), one or more seconds, or other shorter orlonger time intervals.

As previously indicated, there are several different types of FDPs.Examples include BFD and 802.1ag. The following sections of theapplication describe embodiments of present invention for BFD and802.1ag packets processing.

Processing of Bidirectional Forwarding (BFD) Protocol Packets

As previously described, BFD is a type of FDP. FIG. 9 depicts a formatfor a BFD packet. A BFD packet is delineated by a Start of Packet (SOP)and an End of Packet (EOP) field. A BFD packet is generally transmittedin a unicast, point-to-point mode. As depicted in FIG. 9, a BFD packetcomprises a Unicast header 902, an internal header 904, a DestinationMAC 906, a source MAC 908, an EtherType field 910, an IP header (IPv4 orIPv6) 912, a UDP header 914, a BFD header 916, and data 918.

EtherType Field 910 indicates whether the IP Header is IPv4 or IPv6. Forexample, a value of 0x0800 indicates IPv4 while 0x86DD indicates IPv6.In case of an IPv4 packet, IP header field 912 comprises 20 bytes of anIPv4 header (as specified by the IPv4 protocol). In case of an IPv6packet, IP header field 912 comprises 40 bytes of an IPv6 header (asspecified by the IPv6 protocol).

UDP header section 914 of the packet is used by FPH module 116 toidentify a packet as a BFD packet. The following Table A shows thecontents of UDP header section 914.

TABLE A UDP Header Format Field Size (bits) Purpose Checksum 16 UDPchecksum. Source Port 16 A free port on the sender's machine where anyresponses should be sent. Destination Port 16 This field identifies thedestination program on the server this packet should be directed to.This value is (decimal) 3784 for BFD control and (decimal) 3785 for BFDecho packets. Message Length 16 Total size of UDP header plus datapayload (but not the IP header) in 8-bit chunks (aka bytes or octets).A BFD echo packet is addressed to the router who is sending it, so thatthe next-hop router will send the packet back to the initiating router.FPH module 116 uses the “Destination Port” field to identify a packet asa BFD packet.

FIG. 10 depicts the format for BFD header field 916. The various fieldsin the BFD header field include:

(1) Version (3-bit): The version number of the protocol.

(2) Diagnostic (Diag) (5-bit): A diagnostic code specifying the localsystem's reason for the last session state change. This field allowsremote systems to determine the reason that the previous session failed.Values are: 0—No Diagnostic; 1—Control Detection Time Expired; 2—EchoFunction Failed; 3—Neighbor Signaled Session Down; 4—Forwarding PlaneReset; 5—Path Down; 6—Concatenated Path Down; 7—Administratively Down;8—Reverse Concatenated Path Down; 9-31—Reserved for future use.

(3) State (STA) (2-bit): The current BFD session state as seen by thetransmitting system. Values are: 0—AdminDown; 1—Down; 2—Init; 3—UpPoll(P) (1-bit): If set, the transmitting system is requesting verificationof connectivity, or of a parameter change. If clear, the transmittingsystem is not requesting verification.

(4) Final (F) (1-bit): If set, the transmitting system is responding toa received BFD Control packet that had the Poll (P) bit set. If clear,the transmitting system is not responding to a Poll.

(5) Control Plane Independent (C) (1-bit): If set, the transmittingsystem's BFD implementation does not share fate with its control plane.If clear, the transmitting system's BFD implementation shares fate withits control plane.

(6) Authentication Present (A) (1-bit): If set, the AuthenticationSection is present and the session is to be authenticated.

(7) Demand (D) (1-bit): If set, the transmitting system wishes tooperate in Demand Mode. If clear, the transmitting system does not wishto or is not capable of operating in Demand Mode.

(8) Reserved (R) (1-bit): This bit must be zero on transmit, and ignoredon receipt. Detect Multiple (8-bit): Detect time multiplier. Thenegotiated transmit interval, multiplied by this value, provides thedetection time for the transmitting system in Asynchronous mode.

(9) Length (8-bit): Length of the BFD Control packet, in bytes.

(10) My Discriminator (32-bit): A unique, nonzero discriminator valuegenerated by the transmitting system, used to demultiplex multiple BFDsessions between the same pair of systems.

(11) Your Discriminator (32-bit): The discriminator received from thecorresponding remote system. This field reflects back the received valueof My Discriminator, or is zero if that value is unknown.

(12) Desired Min TX Interval (32-bit): This is the minimum interval (inmicroseconds) that the local system would like to use when transmittingBFD Control packets.

(13) Required Min RX Interval (32-bit): This is the minimum interval, inmicroseconds, between received BFD Control packets that this system iscapable of supporting.

(14) Required Min Echo RX Interval (32-bit): This is the minimuminterval, in microseconds, between received BFD Echo packets that thissystem is capable of supporting. If this value is zero, the transmittingsystem does not support the receipt of BFD Echo packets.

In the receive (Rx) path, TM Interface module 802 determines if anincoming packet is a BFD packet based upon the “Destination Port”information in the UDP header portion of the packet. TM Interface module802 then determines if the BFD packet should be dropped (or terminated)or otherwise should be sent to CPU 114 for inspection. As part of thisdetermination, TM Interface module 802 presents a portion of the BFDpacket to Packet Inspection module 804. Generally, an offset into theBFD packet is provided to Packet Inspection module 804.

Packet Inspection module 804 then compares the information in the BFDpacket portion received from TM Interface module 802 to informationstored in the reference information to see if there is a match. In oneembodiment, the reference information for BFD packets comparison isstored by FPH module 116 and comprises 512 BFD session entries, eachentry 12-bytes long. FIG. 11 depicts a memory structure 1100 storing BFDreference information for multiple BFD sessions according to anembodiment of the present invention. As depicted in FIG. 11, each entry1102 stores information for a BFD session and has a 12-byte header 1104and counters information 1106. The BFD reference information for eachsession may be configured by software executed by CPU 114 and used by TMInterface module 802 for the comparison.

Packet Inspection module 804 uses an index to select which one of the512 reference information session entries of structure 1100 is to beselected for comparison with BFD packet information. As previouslydescribed, a BFD packet has a 24-byte BFD header section 916. The24-byte header section or a portion thereof (e.g., a 12-byte section ofthe BFD header) may be used as an index. In one embodiment, the leastsignificant 9 bits of the “Your Discriminator” of the BFD header sectionof a BFD packet that are unique per BFD session are used by the TMInterface module 802 as an index to the BFD reference memory structure.The size of the index depends upon the number of entries stored in theBFD reference information. In alternative embodiments, any uniqueportion of the BFD packet may be used as an index.

The index, which is based upon a portion of the BFD packet, is then usedto identify a particular session entry in the BFD reference information.The reference information from the selected session entry is thencompared to the information in the portion of the BFD packet received byPacket Inspection module 804 to see if there is a match. For example,for an entry in memory structure 1100 depicted in FIG. 11, the 12 headerbytes of the entry are used for the comparison. Packet Inspection module804 then sends a signal to TM Interface module 802 indicating the resultof the comparison.

If TM Interface module 802 receives a signal from Packet Inspectionmodule 804 indicating a match, then the particular BFD packet is droppedor terminated. In this manner, the BFD packet is not forwarded to CPU114. If the signal received from Packet Inspection module 804 indicatesthat there was no match, it indicates to TM Interface module 802 thatthe BFD packet needs to be forwarded to CPU 114 for inspection andprocessing. TM Interface module 802 then forwards the BFD packet to CPU114 via Rx Handler 806 and CPU Interface Module 810.

FPH module 116 is also configured to flag non-receipt of BFD packets fora BFD session. In one embodiment, this may be performed by TM Interfacemodule 802. This is facilitated by counter information 1006 that isincluded in each session entry in the BFD reference information 1100 asdepicted in FIG. 11. FIG. 12 depicts contents of counter information1106 for a BFD session entry according to an embodiment of the presentinvention. As depicted in FIG. 12, counter information 1106 includes aninterval_limit timer 1202 and a last_received timer 1204. Field 1202 istypically programmed by software executed by CPU 114. Interval_timer1202 indicates the interval_limit within which FPH module 116 shouldreceive an FDP packet for that session. Last_received timer 1204 is usedby FPH module 116 to monitor the time that it has waited to receive anFDP packet for the session. When a BFD packet is received for a session(i.e., when the information for a received BFD packet matches thereference information in the session entry) the last_received timer inthe entry is reset. Other timers may also be provided in alternativeembodiments. For example, a timer may be provided to count the number oftimes that the interval_limit timer value has been exceeded.

FPH module 116 iteratively checks the counters information for thevarious BFD session entries in memory structure 1100. When FPH module116 determines for a session that last_received timer 1204 for thesession reaches or exceeds interval_limit timer 1202, it indicates thata BFD packet for the session was not received in the expected timeinterval and FPH module 116 signals this error condition to CPU 114. Inone embodiment, an interrupt is generated by FPH module 116 to flag thatthe particular BFD session has expired and there may be some failure inthe network (e.g., a link is down). In this manner, non-reception of aBFD packet for a session is detected and flagged.

Counters information 1106 is monitored and checked by FPH module 116 ona periodic basis for the BFD entries. During a check, FPH module 116walks through the session entries in the BFD reference information 1100and checks the timers for each entry. In one embodiment, the frequencyat which the checks are repeated is user-programmable. The frequency mayalso be determined automatically based upon the interval_limit timersfor the sessions. For example, in one embodiment, the iterationfrequency is set to the least common denominator of the variousinterval_limit timers being monitored for the various sessions by FPHmodule 116. In this manner, the frequency is programmable and/or may beautomatically determined from the interval_limit timers information forthe BFD sessions in the reference information.

In the transmit (Tx) path, FPH module 116 is configured to performautomated transmission of BFD packets for the various BFD sessions. Inone embodiment, this may be performed by Tx handler 808. In oneembodiment, a memory structure such as linked list 600 depicted in FIG.6 and described above may be used to facilitate the automatedtransmission of BFD packets for different BFD sessions. In alternativeembodiments, other types of memory structures may be used. The BFDpackets transmitted by Tx Handler module 808 are forwarded to TMInterface module 802 and then to TM module 204. The BFD packets are thenforwarded to one or more ports of the network device. The BFD packetsare then transmitted from the network device using the one or more portsof the network device.

Processing of 802.1ag Packets

As previously indicated, 801.1ag packets are a type of FDP packets. The802.1ag standard specifies protocols, procedures, and managed objects tosupport transport fault management. These allow discovery andverification of the path, through bridges and LANs, taken for framesaddressed to and from specified network users, detection, and isolationof a connectivity fault to a specific bridge or LAN. 802.1agConnectivity Fault Management (CFM) provides capabilities for detecting,verifying and isolating connectivity failures in multi-vendor networks.FPH module 116 assists the CPU of a network device in processing 802.1agpackets, both in processing of incoming 802.1ag packets (e.g.,determining if an 802.1ag packet should be forwarded to the CPU) andtransmission of 802.1ag packets.

FPH module 116 is capable of supporting multiple types (e.g., fivedifferent types in one embodiment) of 802.1ag packets. FIGS. 13A and 13Bdepict formats for two types of 802.1ag packets that may be processed byan embodiment of the present invention. The format depicted in FIG. 13Ais for an 802.1ag packet received from VPLS/VLL uplink. The formatdepicted in FIG. 13B is for an 802.1ag packet received from a regularlink.

Each 802.1ag packet has a data section (e.g., section 1302 depicted inFIG. 13A and section 1304 depicted in FIG. 13B) that is used by FPHmodule 116 for analysis. FPH module 116 determines the offset within an802.1ag packet to access the data section of the packet. FIG. 14 depictscontents of an 802.1ag data section. The data section comprises a“Sequence Number” field 1402 that is incremented each time an 802.1agpacket is transmitted. Accordingly, sequence number 1402 changes witheach transmission of an 802.1ag packet. This changing field has to betaken into account when performing comparisons to determine whether an802.1ag packet it to be forwarded to a CPU and also while transmitting802.1ag packets.

FPH module 116 identifies a packet as an 802.1ag packet using an 802.1agpacket reference information table. FIG. 15 depicts an 802.1ag packetreference table 1500 according to an embodiment of the presentinvention. Table 1500 may be stored by FPH module 116 or in somelocation accessible to FPH module 116. As depicted in FIG. 15, eachentry in table 1500 has the following content:

(1) Etype 1 (2-bytes): This is the first Etype field after the SourceMAC in the 802.1ag packet header. This field is 0x8847 for VPLS/VLLuplink and 0x8902 for a regular link. This field is used in thecomparison performed by FPH module 116 to determine if an 802.1ag packetneeds to be sent to the CPU for processing and whether it can bedropped.

(2) Etype 2 Option (1-byte): This field consists of a 1-bit check fieldand a 7-bit offset field. If the check bit is set, the offset fieldindicates the number of bytes after Etype 1 where Etype 2 can be found.If the incoming packet is from a VPLS/VLL, FPH module 116 checks theMPLS label stack for the S bit. If the bit is 0, 4-bytes will get addedto the offset field.

(3) Etype 2 (2-bytes): This is compared against an incoming packet'ssecond Etype field if the check bit is set in the Etype 2 Option'sfield.

(4) Etype 3 Option (1-byte): This field consists of a 1-bit check fieldand a 7-bit offset field. If the check bit is set, the offset fieldindicates the number of bytes after Etype 1 where Etype 3 can be found.Etype 3 is considered to be 0x8902 and the 802.1ag Data always startsafter it.

(5) SMAC Option (1-byte): This field consists of a 1-bit check field anda 7-bit offset field. If the check bit is set, the offset fieldindicates the number of bytes from the last Etype where SMAC can befound.

In one embodiment, FPH module 116 uses the 802.1ag packet referencetable to determine if an incoming packet is an 802.1ag packet. If thepacket is determined to be an 802.1ag packet, then the packet isbuffered and an entry for the packet created in the CPU_assist ringdepicted in FIG. 7. The 802.1ag packet is then processed as previouslydescribed with regards to FIG. 7. A portion of the 802.1ag packet isused to perform a comparison with reference information. As describedabove, if there is a match, it indicates that the 802.1ag packet neednot be provided to CPU 114 and can be dropped. If there is no match, itindicates that the 802.1ag packet is to be provided to CPU 114. In thiscase, a buffer swap is performed between the buffer pointed to by theentry in CPU_assist ring and a free entry in CPU ring, as previouslydescribed. CPU 114 may then access the 802.1ag packet from buffer memory710 and process the packet.

The use of the dual ring structure depicted in FIG. 7 and describedabove may be used for processing incoming 802.1ag packets. This enablesthe network device to receive 802.1ag packets even when the CPU of thenetwork device is unable to keep up with the processing of the packets.The incoming 802.1ag packets stored in CPU_assist ring 702 are processedby FPH module 116 to determine whether the packets need to be forwardedto the CPU of the network device for further processing.

In one embodiment, various checks are made to determine whether an802.1ag packet needs to be forwarded to the CPU for processing. FPHmodule 116 first checks the Opcode field (depicted in FIG. 14) of thepacket. If Opcode is 1, the 802.1ag packet is a Continuity Check Message(CCM) and further comparisons are performed. Else, if the Opcode is not1, then the packet is forwarded to the CPU for further processing.

As indicated above, if the 802.1ag packet is determined to be a CCMpacket, then further comparisons are performed to determine if thepacket needs to be forwarded to the CPU of the network device. In oneembodiment, the reference information against which the comparisons areperformed includes a hash table and a sessions table. The hash table andmemory table may be stored in a memory location accessible to FPH module116 and are initialized by software executed by the CPU of the networkdevice. In one embodiment, the hash table and sessions table may bestored in RAM (e.g., SDRAM) associated with the CPU.

FIG. 16 depicts contents of a hash table 1602 and sessions table 1604storing reference information according to an embodiment of the presentinvention. As depicted in FIG. 16, as part of the processing, a portion1606 of an 802.1ag packet is fed to a hash function 1608 to generate ahash index 1610. In one embodiment, the portion of the 802.1ag packetthat is fed to hash function 1608 includes bytes 9-10 (MEPID), and bytes13-17 and bytes 36-58 (MAID) (see FIG. 14) of the header of a CCM802.1ag packet. In one embodiment, hash function 1608 yields an 8-bithash value 1610 that represents an index to an entry 1612 within hashtable 1602. FPH module 116 then uses information in the entry withinhash table 1602 to find an index to an entry in sessions table 1604.

According to an embodiment of the present invention, each entry 1612 inhash table 1602 comprises packet reference information 1614 to be usedfor comparison, a session table pointer 1616 pointing to an entry insessions table 1604, and a next pointer 1618 pointing to the next entryin hash table 1602. In one embodiment, packet reference information 1614comprises 50 bytes corresponding to bytes 9-10 of MEPID, and bytes 13-17and 36-58 of MAID from a CCM 802.1ag packet. In this embodiment, afteran entry in hash table 1602 has been identified by hash index 1610 for areceived 802.1ag packet, bytes 9-10 of MEPID, and bytes 13-17 and 36-58of MAID from the received 802.1ag packet are compared with the 50 bytes1614 stored in the hash table entry indexed by the 8-bit hash result. Ifthe received packet information matches the packet reference information1614 stored in the hash table entry, then session table pointer 1616 ofthe hash table entry is used to identify an entry in sessions table1604. If there is no match, then the entries in hash table 1602 may betraversed using next pointer 1618 until a matching packet referenceinformation is identified or until all entries have been traversed. Thesession table pointer 1616 of the entry comprising the matching packetreference information is then used to identify an entry in sessionstable 1604. If no matching information is found in the hash table, thenthe received 802.1ag packet is forwarded to the CPU of the networkdevice.

As depicted in FIG. 16, sessions table 1604 may store a number ofentries, each entry corresponding to an 802.1ag session. In oneembodiment, sessions table 1604 stores 256 entries. According to anembodiment of the present invention, each entry in sessions table 1604comprises the following information:

(1) Ownership (1-bit): The ownership bit is used to indicate if FPHmodule 116 can modify the sequence number of the entry. When the bit isset, the session can be used by FPH module 116.

(2) Accept (1-bit): When this bit is set, FPH module 116 disregards thesequence number of the first 802.1ag packet matching the session. FPHmodule 116 saves the incremented CCM packet sequence number in thesession entry and resets the accept bit.

(3) Version (5-bits): If the version field in the session table entrydoes not match the corresponding information in the received 802.1agpacket, the packet is forwarded to the CPU.

(4) Flags (8-bits): If this field in the session table entry does notmatch the corresponding information in the received 802.1ag packet, thereceived packet is sent to the CPU.

(5) Sequence number (32-bits): Software executing on the CPU initializesa value. When the Accept bit is set, FPH module 116 accepts whateversequence number it sees and stores it in the session entry and thenresets the Accept bit. When the Accept bit is not set (i.e., is zero),FPH module 116 checks to see if the sequence number of an incoming802.1ag packet is 1 greater than the stored sequence number in thesession table entry. If true, the sequence number of the incoming packetis correct. If the ownership bit is 1, the sequence number value isincremented and saved into the sessions table entry, so that the rightvalue is available for comparison for that session for the next received802.1ag packet that will also have an incremented sequence number. Ifsequence number of an incoming 802.1ag packet is not 1 greater than thestored sequence number in the session table entry, there is a potentialproblem and a packet with the correct expected sequence number may havebeen dropped. In this case, the new sequence number of the packet isstored in the session entry in the session status FIFO (describedbelow), but the received 802.1ag packet is not forwarded to the CPU. Theupdating of the sequence number in the session table entry preventsevery packet, after a mismatch of sequence numbers, of being treated asa mismatch and being forwarded to the CPU.

(6) Source Port (10-bits) and VC Label (20-bits): Source port of apacket is internal header bits 64-73 and VC label is MPLS stack bits0-19. An incoming 802.1ag packet is sent to the CPU if the field checksbelow against the session entry do not match:

-   -   i) For packets coming from VPLS/VLL link (outer Etype is 0x8847        and Inner Etype is 0x8902) FPH module 116 checks the VC label.    -   ii) For packets coming from regular link (Etype is 0x8902), FPH        module 116 checks the Source Port.

(7) Source MAC (6-bytes): It can be outer or inner Source MAC.

(8) Session Status (8-bits): These bits are set by FPH module 116 andencode conditions related to the session corresponding to the sessionstable entry. The conditions are:

8′h01=Session timeout

8′h02=Sequence number mismatch

Others=Reserved.

(9) SW timer (16-bits) (referred to above as the interval_limit timer):This field is set by software executed by the CPU and indicates the timeinterval that an 802.1ag packet is expected to be received in for thatsession. This may be expressed as a multiple of some base timer. This issame as the interval_limit timer previously described.

(10) HW timer (16-bits) (referred to above as the last-received timer):This field is used by FPH module 116 to keep track of aging, i.e., thetime that an 802.1ag packet matching the session has not been received.It is reset by FPH module 116 every time it processes a matching 802.1agpacket whether it is dropped or sent to the CPU. This is same as thetrx_interval timer previously described.

(11) Error counter (8-bits): This field is incremented by FPH module 116every time there is a Sequence number mismatch. At a programmableinterval, FPH module 116 writes the Session pointer of a session entryand the non-zero Error counter into the Session Status FIFO.

(12) Session counter (16-bits): This field keeps track of how manypackets matching a session have been received. This field is incrementedby FPH module 116 every time a packet matching the session is received.Software executing on the CPU of the network device may reset the timerwhen it takes over the ownership of the session.

As previously described, if the received packet information matches thepacket reference information 1614 stored in the hash table entry,session table pointer 1616 of the hash table entry is used to identifyan entry in session table 1604. The reference information in the sessiontable entry is then compared to information in the packet. In oneembodiment, one or more fields of the particular session table entry arecompared to corresponding fields of the received packet. If the comparedinformation matches, then the received packet is dropped and notforwarded to the CPU. If the compared information does not match, thenthe packet is forwarded to CPU. The fields of a session table entry thatare compared to the corresponding information in a received packet maydiffer based upon the type of the received packet, for example, the typeof 802.1ag packet. In this manner, a received 802.1ag packet is droppedif information from the packet matches reference information 1614 of anentry 1612 in hash table 1602 and information from the packet alsomatches reference information in a session table entry pointed to bysession table pointer 1616 of the matching hash table entry 1612—else,the packet is not dropped and forwarded to the CPU for processing.

As depicted in FIG. 16, a linked list 1620 is provided that enables FPHmodule 116 to walk through the entries in sessions table 1604 in orderto determine if an 802.1ag packet has not been received within theexpected time interval for each of the sessions. For each session entry,FPH module 116 compares the hw_timer value for the entry with thesw_timer value for the entry. If the sw_timer and hw_timer are the samefor a session entry, it indicates that an 802.1ag packet was notreceived within the time interval for that session and an errorcondition is flagged by FPH module 116. In one embodiment, FPH module116 writes the session pointer into the Session Status FIFO that storessession pointers of the sessions that have had issues such as sessiontimeouts or session sequence number mismatch, etc. and generates aninterrupt.

FIG. 17 depicts a format of a Session Status FIFO according to anembodiment of the present invention. As depicted in FIG. 17, the sessionstatus FIFO entry comprises:

(1) Session Pointer (16-bits): Indicates the list significant 16 bits ofthe pointer where there is a sequence number mismatch.

(2) Error Counter (8-bits): It is the same value as the Error Counterfield in the Session Table entry. Relevant for Sequence number mismatch.

(3) Used FIFO Entries (4-bits): Indicates the number of used FIFOentries in the Session Status FIFO in 32-bit increments i.e., 4′h0: 0-32entries, 4′h1: 33-64 entries, . . 4′hF: 481-512.

(4) Status (4-bits). This field indicates the condition that the entrywas recorded for. The values are: 4′h1: Session timeout; 4′h2: Sequencenumber mismatch; Others: Reserved.

In one embodiment, an 802.1ag packet is also sent to the CPU forprocessing if the following conditions below hold true: (1) The “FirstTLV Offset” (byte 4 of the 802.1ag data section of a packet) is lessthan 70; or (2) If the “First TLV Offset” is equal to or more than 70and the “Optional CCM TLVs” (byte 75 of CCM data) is not zero.

As indicated in FIG. 14, 802.1ag packets comprise a sequence numberwhose value is incremented with each transmitted 802.1ag packet for asession. Accordingly, when 802.1ag packets are transmitted, the sequencenumbers of the packets have to be incremented with each packettransmission. According to an embodiment of the present invention, FPHmodule 116 performs processing to update the sequence number prior totransmission of 802.1 ag packets.

FIG. 18 depicts a linked list 1800 that may be used by FPH module 116 tofacilitate transmission of 802.1ag packets according to an embodiment ofthe present invention. Linked list 1800 comprises a set of entries 1802with each entry storing information for an 802.1ag session. Each entrycomprises a buffer pointer 1804 pointing to a memory location 1820storing the corresponding 802.1ag packet, buffer size information 1806identifying the size of the corresponding 802.1ag packet, timersinformation 1808, command/status information 1810, offset information1812, other information 1814, and a pointer 1816 pointing to the nextentry in linked list 1800. Pointer 1816 is used to traverse the linkedlist. In one embodiment, linked list 1800 is a circular linked listwherein pointer 1816 of the last entry in the linked list points to thefirst entry in the linked list.

Timers information 1808 in an entry stores the trx_interval timer andthe last_sent timer values for the 802.1ag session corresponding to theentry. The trx_interval timer value for the session is initialized bysoftware executed by CPU 114. As previously described, the trx_intervaland last_sent timers are used to determine when to send an 802.1agpacket for the session.

According to an embodiment of the present invention, a base timer may beassociated with linked list 1800. The base timer determines the intervalat which the entries in linked list 1800 are visited and checked by FPHmodule 116. For example, if the base timer for linked list 1800 depictedin FIG. 18 is 5 msecs, then FPH module 116 visits each entry in linkedlist 1800 every 5 msecs. For a linked list with an associated basetimer, the trx_interval and last_sent timer values are expressed asmultiples of the base timer value. For example, if the base timer valueassociated with linked list 1800 is 5 msecs and the periodic timeinterval for transmitting an 802.1ag packet for a session is 20 msecs,then trx_interval may be represented as (4* base timer). In oneembodiment, the base timer value for a linked list may be determinedbased upon the trx_interval timers for the various session entries inthe linked list.

Command/status information 1810 may store other information related tothe 802.1ag session. For example, if the 802.1ag session requires anyspecial processing then that information may be stored in information1810.

Offset information 1812 provides an offset into the 802.1ag packetpointed to by buffer pointer 1804 pointing to information in the packetthat needs to be changed prior to periodic transmission of the packet.Offset information 1812 thus identifies the location within an 802.1agpacket that needs to be changed prior to transmission. For example, aspreviously described, the sequence number within an 802.1ag needs to beincremented with each transmitted 802.1ag packet. In such an embodiment,offset information 1812 may provide an offset to a location in the802.1ag packet storing sequence number information that needs to beincremented with every transmitted packet. In other types of FDPpackets, other one or more offsets may be provided that may be used toaccess one or more sections or portions of the packet that need to bechanged prior to transmission of the packet.

The sequence number information in an 802.1ag packet is incremented byFPH module 116 with each transmission of an 802.1ag packet for thatsession. The initial sequence number value may be set by softwareexecuted by the CPU of a network device. The sequence number information1814 is then updated (e.g., incremented) after each 802.1ag packettransmission such that the updated value may subsequently be used forthe next transmitted 802.1ag packet. In this manner, a parameter withinan FDP packet may be updated with transmission of each FDP packet suchthat the correct parameter value is used for the next transmission.

FIG. 19 depicts a simplified flowchart 1900 showing a method performedby FPH module 116 for transmitting 802.1ag packets according to anembodiment of the present invention. The processing depicted in FIG. 19is performed by FPH module 116 for each entry in a transmission linkedlist (e.g., linked list 1800 depicted in FIG. 18) for every iterationwhen the entry is checked. For a session entry in the linked list, fromtimers information 1808 in the session entry, FPH module 116 checks ifthe last_sent timer has reached the trx_interval timer (step 1902). Ifit is determined in 1902, that the last_sent timer has not reached thetrx_interval timer (i.e., the last_sent timer is less than thetrx_interval timer), it is not time yet to transmit the 802.1ag packetand the last_sent timer is incremented (step 1904). The amount by whichthe last_sent timer is incremented depends upon the base timerassociated with the linked list. For example, if the base timer is 5msecs, then the last_received timer is incremented by 5 msecs.

If it is determined in 1902 that the last_sent timer has reached orexceeded the trx_interval timer for the session, FPH module 116 preparesan 802.1ag packet for transmission. As part of this process, FPH module116 first accesses the 802.1ag packet pointed to by buffer pointer 1804of the entry corresponding to the session (step 1906). Offsetinformation 1812 of the linked list entry is then used to locate thesequence number field within the 802.1ag packet accessed in 1906 (step1908). An 802.1ag packet is then transmitted based upon the packetaccessed in 1906 and having the sequence number located in 1908 (step1910). As part of 1910, FPH module 116 may transmit the 802.1ag packetto TM module 204. The 802.1ag packet may then be forwarded to a port ofthe network device and transmitted from the network device via the port.

The sequence number located in 1908 in the packet accessed in 1906 isthen incremented by one (step 1912). In this manner, an incrementedsequence number is available for the next transmission of an 802.1agpacket for that session. The last_sent timer in timer information 1808for the entry is then reset to zero (step 1914) to restart the countdownto the next packet transmission.

As described above with respect to FIG. 19, the sequence number of an802.1ag packet stored in the buffer is incremented with eachtransmission of an 802.1ag packet. In this manner, 802.1ag packets withthe correct sequence number are transmitted. The technique describedabove with respect to FIG. 19 may also be used to change one or morefields of FDP packets prior to transmission, as necessitated by theFDPs. In alternative embodiments of the present invention, multiplelinked lists may be used by FPH module 116 to facilitate transmission of802.1ag packets. Each linked list may have its own associated basetimer.

In the examples provided above, a linked list memory structure was usedto facilitate transmission of FDP packets. Embodiments of the presentinvention are however not restricted to using linked lists. Other typesof memory structures may also be used in alternative embodiments.

Although specific embodiments of the invention have been described,various modifications, alterations, alternative constructions, andequivalents are also encompassed within the scope of the invention. Thedescribed invention is not restricted to operation within certainspecific data processing environments, but is free to operate within aplurality of data processing environments. Additionally, although thepresent invention has been described using a particular series oftransactions and steps, it should be apparent to those skilled in theart that the scope of the present invention is not limited to thedescribed series of transactions and steps.

Further, while the present invention has been described using aparticular combination of hardware and software, it should be recognizedthat other combinations of hardware and software are also within thescope of the present invention. The present invention may be implementedonly in hardware, or only in software, or using combinations thereof.

The specification and drawings are, accordingly, to be regarded in anillustrative rather than a restrictive sense. It will, however, beevident that additions, subtractions, deletions, and other modificationsand changes may be made thereunto without departing from the broaderspirit and scope of the invention as set forth in the claim.

1. A method of transmitting packets according to a failure detectionprotocol, the method comprising: storing, at a network device, timerinformation specifying a periodic time interval for transmitting afailure detection protocol packet for a failure detection protocol; andperiodically transmitting failure detection protocol packets for thefailure detection protocol at times determined based upon the periodictime interval stored for the failure detection protocol; wherein thetransmitting is performed by a module of the network device other than aprocessor configured to execute software for processing failuredetection protocol packets.
 2. The method of claim 1 wherein thetransmitting comprises: determining a time for transmitting a failuredetection protocol packet for the failure detection protocol based uponthe periodic time interval stored for the failure detection protocol;and transmitting a failure detection protocol packet at the determinedtime.
 3. The method of claim 1 wherein the timer information comprises afirst timer specifying the periodic time interval for the failuredetection protocol and a second timer identifying when a failuredetection protocol packet was last transmitted by the network device forthe failure detection protocol.
 4. The method of claim 3 wherein thetransmitting comprises transmitting a failure detection protocol packetwhen the second timer equals the first timer.
 5. The method of claim 3wherein the first timer is set by the software executed by the processorof the network device and the second timer is updated by the module. 6.The method of claim 1 wherein each failure detection protocol packet forthe failure detection protocol comprises a field, and wherein thetransmitting comprises: transmitting a first failure detection protocolpacket based upon the periodic time interval stored for the failuredetection protocol, wherein the field of the first failure is set to afirst value; and transmitting, after transmitting the first failuredetection protocol packet, a second first failure detection protocolpacket based upon the periodic time interval stored for the failuredetection protocol, wherein the field of the second failure detectionprotocol packet is set to a second value that is different from thefirst value.
 7. The method of claim 6 further comprising: storing aparameter for the failure detection protocol; prior to transmitting thefirst failure detection protocol packet, setting the field of the firstfailure detection protocol packet to the first value based upon thevalue of the parameter; updating the value of the parameter upontransmission of the first failure detection protocol packet; and priorto transmitting the second failure detection protocol packet, settingthe field of the second failure detection protocol packet to the secondvalue based upon the updated value of the parameter.
 8. The method ofclaim 1 wherein the failure detection protocol is 802.1ag.
 9. The methodof claim 1 wherein the failure detection protocol is BidirectionalForwarding (BFD) protocol.
 10. The method of claim 1 wherein theperiodic time interval is less than one second.
 11. A system fortransmitting packets according to a failure detection protocol, thesystem comprising: a memory configured to store timer informationspecifying a periodic time interval for transmitting a failure detectionprotocol packet for a failure detection protocol; a processor configuredto execute software for processing failure detection protocol packets.;and a module configured to periodically transmit failure detectionprotocol packets for the failure detection protocol at times determinedbased upon the periodic time interval stored for the failure detectionprotocol.
 12. The system of claim 11 wherein the module is configuredto: determine a time for transmitting a failure detection protocolpacket for the failure detection protocol based upon the periodic timeinterval stored for the failure detection protocol; and transmit afailure detection protocol packet at the determined time.
 13. The systemof claim 11 wherein the timer information comprises a first timerspecifying the periodic time interval for the failure detection protocoland a second timer identifying when a failure detection protocol packetwas last transmitted by the system for the failure detection protocol.14. The system of claim 13 wherein the module is configured to transmita failure detection protocol packet when the second timer equals thefirst timer.
 15. The system of claim 13 wherein the first timer is setby the software executed by the processor of the network device and thesecond timer is updated by the module.
 16. The system of claim 11wherein each failure detection protocol packet for the failure detectionprotocol comprises a field, and wherein the module is configured to:transmit a first failure detection protocol packet based upon theperiodic time interval stored for the failure detection protocol,wherein the field of the first failure is set to a first value; andtransmit, after transmission of the first failure detection protocolpacket, a second first failure detection protocol packet based upon theperiodic time interval stored for the failure detection protocol,wherein the field of the second failure detection protocol packet is setto a second value that is different from the first value.
 17. The systemof claim 16 wherein the module is configured to: store a parameter forthe failure detection protocol; prior to transmission of the firstfailure detection protocol packet, set the field of the first failuredetection protocol packet to the first value based upon the value of theparameter; update the value of the parameter upon transmission of thefirst failure detection protocol packet; and prior to transmission ofthe second failure detection protocol packet, set the field of thesecond failure detection protocol packet to the second value based uponthe updated value of the parameter.
 18. The system of claim 11 whereinthe failure detection protocol is 802.1ag.
 19. The system of claim 11wherein the failure detection protocol is Bidirectional Forwarding (BFD)protocol.
 20. The system of claim 11 wherein the periodic time intervalis less than one second.
 21. The system of claim 11 wherein the moduleis a field-programmable logic device.
 22. A network device comprising: aprocessor configured to execute software for processing failuredetection protocol packets, the processor configured to set a periodictime interval for transmitting a failure detection protocol packet for afailure detection protocol; a module configured to periodically transmitfailure detection protocol packets for the failure detection protocol attimes determined based upon the periodic time interval stored for thefailure detection protocol; and one or more ports configured to transmitthe failure detection protocol packets from the network device.